import { getToken, setToken, removeToken, setTimeStamp } from '@/utils/auth'
import { login, getInfo, getUserDetailById } from '@/api/user'
import { resetRouter } from '@/router'
const state = {
  // token的持久化
  token: getToken() || '',
  // token: localStorage.getItem('hr-token') || '' // 设置token初始状态 token持久化 =》 放到缓存中
  userInfo: {}
}
const mutations = {
  setToken(state, token) {
    // localStorage.setItem('hr-token', token)
    state.token = token // 设置token，只是修改state的数据
    setToken(token) // vuex和缓存数据的同步
  },
  // 删除缓存
  removeToken(state) {
    state.token = null // 删除vuex的token
    removeToken() // 先清楚vuex再清除缓存 vuex和缓存数据的同步
  },
  // 设置用户信息
  setUserInfo(state, userInfo) {
    state.userInfo = { ...userInfo } // 用 浅拷贝的方式去赋值对象 因为这样数据更新之后，才会触发组件的更新
  },
  // 删除用户信息
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
const actions = {
  async login(store, data) {
    const res = await login(data) // async和await结合让异步操作看起来像同步代码
    // console.log(res)
    store.commit('setToken', res)
    // login(data).then(res => {
    //   console.log('vuex', res)
    //   store.commit('setToken', res.data.data)
    // })
    // localStorage.setItem('time', Date.now())
    setTimeStamp()
  },
  // 获取信息
  async getUserInfo(store) {
    const result = await getInfo()
    // console.log(result)
    const baseInfo = await getUserDetailById(result.userId)
    const baseResult = { ...result, ...baseInfo }
    // console.log(baseResult)
    store.commit('setUserInfo', baseResult)
    return baseResult
  },
  // 退出的action
  logout(store) {
    store.commit('removeToken') // 删除token
    store.commit('removeUserInfo')// 删除用户信息
    resetRouter()// 重置路由
    // store.commit('permission/setRoutes', [], { root: true })// 退出重置路由
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

